home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / toughmarine.s < prev    next >
Text File  |  1997-01-31  |  15KB  |  911 lines

  1. ItsAToughMarine:
  2.  
  3.  tst.b NASTY
  4.  bne .yesnas
  5.  move.w #-1,12(a0)
  6.  rts
  7. .yesnas:
  8.  
  9.  move.w #$1f1f,14(a0)
  10.  move.w #$4545,6(a0)
  11.  
  12.  move.b worry(a0),d0
  13.  move.b d0,d1
  14.  and.w #128,d1
  15.  and.b #127,d0
  16.  sub.b #1,d0
  17.  bge.s .oknn
  18.  move.b #0,d0
  19. .oknn: 
  20.  add.b d0,d1
  21.  move.b d1,worry(a0)
  22.  
  23.  move.w (a0),CollId
  24.  move.w #80,extlen
  25.  move.b #1,awayfromwall
  26.  
  27.  move.l #20*256,StepUpVal
  28.  move.l #20*256,StepDownVal
  29.  move.l #128*128,thingheight
  30.  move.l #4,deadframe
  31.  move.w #0,screamsound
  32.  move.w #64,nasheight
  33.  clr.b gotgun
  34.  move.w 12(a0),d2
  35.  bge.s .stillalive
  36. .notthisone:
  37.  move.w 12(a0),GraphicRoom(a0)
  38.  rts
  39. .stillalive:
  40.  
  41.  tst.b numlives(a0)
  42.  bgt .notdying
  43.  
  44.  move.w ThirdTimer(a0),d1
  45.  sub.w TempFrames,d1
  46.  bge.s .noneg
  47.  move.w #0,d1
  48. .noneg:
  49.  move.w d1,ThirdTimer(a0)
  50.  
  51.  move.w .dyinganim(pc,d1.w*2),10(a0)
  52.  
  53.  move.b #0,numlives(a0)
  54.  move.l ZoneAdds,a1
  55.  move.l (a1,d2.w*4),a1
  56.  add.l LEVELDATA,a1
  57.  
  58.  move.l ToZoneFloor(a1),d0
  59.  tst.b ObjInTop(a0)
  60.  beq.s .notintopp
  61.  move.l ToUpperFloor(a1),d0
  62. .notintopp:
  63.  asr.l #7,d0
  64.  sub.w #64,d0
  65.  move.w d0,4(a0)
  66.  
  67.  move.w 12(a0),GraphicRoom(a0)
  68.  rts
  69.  
  70. .dyinganim:
  71.  dcb.w 6,18
  72.  dcb.w 10,17
  73.  dcb.w 10,16
  74.  
  75.  
  76. .notdying: 
  77.  
  78.  tst.b 17(a0)
  79.  beq.s .cantseeplayer
  80.  tst.w ThirdTimer(a0)
  81.  ble ToughMarineAttack
  82.  move.w TempFrames,d0
  83.  sub.w d0,ThirdTimer(a0)
  84.  bra .waitandsee
  85.  
  86. .cantseeplayer:
  87.  
  88.  jsr GetRand
  89.  lsr.w #4,d0
  90.  and.w #63,d0
  91.  add.w #20,d0
  92.  move.w d0,ThirdTimer(a0)
  93.  
  94. .waitandsee:
  95.  
  96.  move.w #25,FourthTimer(a0)
  97.  
  98.  move.w 12(a0),d2
  99.  move.l ZoneAdds,a5
  100.  move.l (a5,d2.w*4),d0
  101.  add.l LEVELDATA,d0
  102.  move.l d0,objroom
  103.  
  104.  bsr ViewpointToDraw
  105.  
  106.  asl.l #2,d0
  107.  add.w alframe+2,d0
  108.  add.l #$00100000,d0
  109.  move.l d0,8(a0)
  110.  
  111.  move.w 4(a0),d0
  112.  sub.w #64,d0
  113.  ext.l d0
  114.  asl.l #7,d0
  115.  move.l d0,newy
  116.  move.l d0,oldy
  117.  
  118.  move.w 12(a0),FromZone
  119.  bsr CheckTeleport
  120.  tst.b OKTEL
  121.  beq.s .notel
  122.  move.l floortemp,d0
  123.  asr.l #7,d0
  124.  add.w d0,4(a0)
  125.  bra .nochangedir
  126. .notel:
  127.  
  128.  move.w maxspd(a0),d2
  129.  muls TempFrames,d2
  130.  move.w d2,speed
  131.  move.w Facing(a0),d0
  132.  move.b ObjInTop(a0),StoodInTop
  133.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  134.  jsr GoInDirection
  135.  move.w #%1000000000,wallflags
  136.  
  137.  move.l #%11111111110111100001,CollideFlags
  138.  bsr Collision
  139.  tst.b hitwall
  140.  beq.s .canmove
  141.  
  142.  move.w oldx,newx
  143.  move.w oldz,newz
  144.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  145.  bra .hitathing
  146.  
  147. .canmove:
  148.  
  149.  clr.b wallbounce
  150.  jsr MoveObject
  151.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  152.  move.b StoodInTop,ObjInTop(a0)
  153.  
  154. .hitathing:
  155.  
  156.  tst.b hitwall
  157.  beq.s .nochangedir
  158.  move.w #-1,ObjTimer(a0)
  159. .nochangedir
  160.  
  161.  move.l objroom,a2
  162.  move.w (a2),12(a0)
  163.  move.w newx,(a1)
  164.  move.w newz,4(a1)
  165.  
  166.  move.w (a2),d0
  167.  move.l #ZoneBrightTable,a5
  168.  move.l (a5,d0.w*4),d0
  169.  tst.b ObjInTop(a0)
  170.  bne.s .okbit
  171.  swap d0
  172. .okbit:
  173.  move.w d0,2(a0)
  174.  
  175.  move.l ToZoneFloor(a2),d0
  176.  tst.b ObjInTop(a0)
  177.  beq.s .notintop
  178.  move.l ToUpperFloor(a2),d0
  179. .notintop:
  180.  asr.l #7,d0
  181.  sub.w #64,d0
  182.  move.w d0,4(a0)
  183.  
  184.  
  185.  moveq #0,d2
  186.  move.b damagetaken(a0),d2
  187.  beq .noscream
  188.  
  189.  sub.b d2,numlives(a0)
  190.  bgt .notdeadyet
  191.  
  192.  cmp.b #1,d2
  193.  ble .noexplode
  194.  
  195.  movem.l d0-d7/a0-a6,-(a7)
  196.  sub.l ObjectPoints,a1
  197.  add.l #ObjRotated,a1
  198.  move.l (a1),Noisex
  199.  move.w #400,Noisevol
  200.  move.w #14,Samplenum
  201.  move.b #1,chanpick
  202.  clr.b notifplaying
  203.  st backbeat
  204.  move.b 1(a0),IDNUM
  205.  jsr MakeSomeNoise
  206.  movem.l (a7)+,d0-d7/a0-a6
  207.  
  208.  movem.l d0-d7/a0-a6,-(a7)
  209.  move.w #0,d0
  210.  asr.w #2,d2
  211.  tst.w d2
  212.  bgt.s .ko
  213.  moveq #1,d2
  214. .ko:
  215.  move.w #31,d3
  216.  jsr ExplodeIntoBits
  217.  movem.l (a7)+,d0-d7/a0-a6
  218.  
  219.  cmp.b #40,d2
  220.  blt .noexplode
  221.  
  222.  move.w #-1,12(a0)
  223.  move.w 12(a0),GraphicRoom(a0)
  224.  rts
  225.  
  226. .noexplode:
  227.  
  228.  movem.l d0-d7/a0-a6,-(a7)
  229.  sub.l ObjectPoints,a1
  230.  add.l #ObjRotated,a1
  231.  move.l (a1),Noisex
  232.  move.w #200,Noisevol
  233.  move.w screamsound,Samplenum
  234.  move.b #1,chanpick
  235.  clr.b notifplaying
  236.  st backbeat
  237.  move.b 1(a0),IDNUM
  238.  jsr MakeSomeNoise
  239.  movem.l (a7)+,d0-d7/a0-a6
  240.  
  241.  move.w #25,ThirdTimer(a0)
  242.  
  243.  move.w 12(a0),GraphicRoom(a0)
  244.  rts
  245.  
  246. .notdeadyet:
  247.  clr.b damagetaken(a0)
  248.  movem.l d0-d7/a0-a6,-(a7)
  249.  sub.l ObjectPoints,a1
  250.  add.l #ObjRotated,a1
  251.  move.l (a1),Noisex
  252.  move.w #200,Noisevol
  253.  move.w screamsound,Samplenum
  254.  move.b #1,chanpick
  255.  clr.b notifplaying
  256.  move.b 1(a0),IDNUM
  257.  st backbeat
  258.  jsr MakeSomeNoise
  259.  movem.l (a7)+,d0-d7/a0-a6
  260.  
  261.  
  262. .noscream
  263.  
  264.  
  265.  move.w TempFrames,d0
  266.  sub.w d0,ObjTimer(a0)
  267.  bge.s .keepsamedir
  268.  
  269.  jsr GetRand
  270.  and.w #8190,d0
  271.  move.w d0,Facing(a0)
  272.  move.w #50,ObjTimer(a0)
  273.  
  274. .keepsamedir:
  275.  
  276.  move.w TempFrames,d0
  277.  sub.w d0,SecTimer(a0)
  278.  bge.s .nohiss
  279.  
  280.  jsr GetRand
  281.  lsr.w #6,d0
  282.  and.w #1,d0
  283.  add.w #17,d0
  284.  movem.l d0-d7/a0-a6,-(a7)
  285.  sub.l ObjectPoints,a1
  286.  add.l #ObjRotated,a1
  287.  move.l (a1),Noisex
  288.  move.w #100,Noisevol
  289.  move.w d0,Samplenum
  290.  move.b #1,chanpick
  291.  clr.b notifplaying
  292.  move.b 1(a0),IDNUM
  293.  st backbeat
  294.  jsr MakeSomeNoise
  295.  movem.l (a7)+,d0-d7/a0-a6
  296.  
  297.  Jsr GetRand
  298.  lsr.w #6,d0
  299.  and.w #255,d0
  300.  add.w #300,d0
  301.  move.w d0,SecTimer(a0)
  302.  
  303. .nohiss:
  304.  
  305.  move.b ObjInTop(a0),ViewerTop
  306.  move.b PLR1_StoodInTop,TargetTop
  307.  move.l PLR1_Roompt,ToRoom
  308.  move.l objroom,FromRoom
  309.  move.w newx,Viewerx
  310.  move.w newz,Viewerz
  311.  move.w PLR1_xoff,Targetx
  312.  move.w PLR1_zoff,Targetz
  313.  move.l PLR1_yoff,d0
  314.  asr.l #7,d0
  315.  move.w d0,Targety
  316.  move.w 4(a0),Viewery
  317.  jsr CanItBeSeen
  318.  
  319.  clr.b 17(a0)
  320.  
  321.  tst.b CanSee
  322.  beq .carryonprowling
  323.  
  324.  move.b #1,17(a0)
  325.  
  326. .carryonprowling:
  327.  
  328.  move.b ObjInTop(a0),ViewerTop
  329.  move.b PLR2_StoodInTop,TargetTop
  330.  move.l PLR2_Roompt,ToRoom
  331.  move.l objroom,FromRoom
  332.  move.w newx,Viewerx
  333.  move.w newz,Viewerz
  334.  move.w PLR2_xoff,Targetx
  335.  move.w PLR2_zoff,Targetz
  336.  move.l PLR2_yoff,d0
  337.  asr.l #7,d0
  338.  move.w d0,Targety
  339.  move.w 4(a0),Viewery
  340.  jsr CanItBeSeen
  341.  
  342.  tst.b CanSee
  343.  beq .carryonprowling2
  344.  
  345.  or.b #2,17(a0)
  346.  
  347. .carryonprowling2:
  348.  
  349.  
  350.  move.w 12(a0),GraphicRoom(a0)
  351.  rts
  352.  
  353. ToughMarineAttack:
  354.  
  355.  move.w 12(a0),d2
  356.  move.l ZoneAdds,a5
  357.  move.l (a5,d2.w*4),d0
  358.  add.l LEVELDATA,d0
  359.  move.l d0,objroom
  360.  bsr ViewpointToDraw
  361.  asl.l #2,d0
  362.  add.w alframe+2,d0
  363.  add.l #$00100000,d0
  364.  move.l d0,8(a0)
  365.  
  366.  btst #0,17(a0)
  367.  beq ToughMarineAttackPLR2
  368.  btst #1,17(a0)
  369.  beq ToughMarineAttackPLR1
  370.  
  371.  move.l ObjectPoints,a1
  372.  move.w (a0),d0
  373.  move.w (a1,d0.w*8),d1
  374.  move.w 4(a1,d0.w*8),d2
  375.  
  376.  move.w PLR1_xoff,d3
  377.  move.w PLR1_zoff,d4
  378.  sub.w d1,d3
  379.  sub.w d2,d4
  380.  muls d3,d3
  381.  muls d4,d4
  382.  add.l d4,d3
  383.  move.w PLR2_xoff,d4
  384.  move.w PLR2_zoff,d5
  385.  sub.w d1,d4
  386.  sub.w d2,d5
  387.  muls d4,d4
  388.  muls d5,d5
  389.  add.l d5,d4
  390.  cmp.l d3,d4
  391.  ble ToughMarineAttackPLR2
  392.  
  393.  
  394. ToughMarineAttackPLR1:
  395.  
  396.  
  397.  move.w TempFrames,d0
  398.  sub.w d0,FourthTimer(a0)
  399.  bgt.s .oktoshoot
  400.  move.w #50,ThirdTimer(a0)
  401. .oktoshoot:
  402.  
  403.  move.w 12(a0),d2
  404.  move.l ZoneAdds,a5
  405.  move.l (a5,d2.w*4),d0
  406.  add.l LEVELDATA,d0
  407.  move.l d0,objroom
  408.  
  409.  bsr ViewpointToDraw
  410.  
  411.  asl.l #2,d0
  412.  add.l #$100000,d0
  413.  move.l d0,8(a0)
  414.  
  415.  move.w PLR1_xoff,newx
  416.  move.w PLR1_zoff,newz
  417.  move.w (a0),d1
  418.  move.l #ObjRotated,a6
  419.  move.l ObjectPoints,a1
  420.  lea (a1,d1.w*8),a1
  421.  lea (a6,d1.w*8),a6
  422.  move.w (a1),oldx
  423.  move.w 4(a1),oldz
  424.  move.w maxspd(a0),d2
  425.  muls.w TempFrames,d2
  426.  move.w d2,speed
  427.  move.w #80,Range
  428.  move.w 4(a0),d0
  429.  ext.l d0
  430.  asl.l #7,d0
  431.  sub.l #64*128,d0
  432.  move.l d0,newy
  433.  move.l d0,oldy
  434.  
  435.  move.b ObjInTop(a0),StoodInTop
  436.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  437.  clr.b canshove
  438.  clr.b GotThere
  439.  jsr HeadTowardsAng
  440.  move.w #%1000000000,wallflags
  441.  
  442.   
  443.  clr.b wallbounce
  444.  Jsr MoveObject
  445.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  446.  move.b StoodInTop,ObjInTop(a0)
  447.  
  448.  move.w AngRet,Facing(a0)
  449.  
  450.  move.l objroom,a2
  451.  move.w (a2),12(a0)
  452.  move.w oldx,(a1)
  453.  move.w oldz,4(a1)
  454.  
  455.  move.w (a2),d0
  456.  move.l #ZoneBrightTable,a5
  457.  move.l (a5,d0.w*4),d0
  458.  tst.b ObjInTop(a0)
  459.  bne.s .okbit
  460.  swap d0
  461. .okbit:
  462.  move.w d0,2(a0)
  463.  
  464.  move.l ToZoneFloor(a2),d0
  465.  tst.b ObjInTop(a0)
  466.  beq.s .notintop
  467.  move.l ToUpperFloor(a2),d0
  468. .notintop:
  469.  asr.l #7,d0
  470.  sub.w #64,d0
  471.  move.w d0,4(a0)
  472.  
  473.  
  474.  moveq #0,d2
  475.  move.b damagetaken(a0),d2
  476.  beq .noscream
  477.  
  478.  sub.b d2,numlives(a0)
  479.  bgt .notdeadyet
  480.  
  481.  cmp.b #1,d2
  482.  ble .noexplode
  483.  
  484.  movem.l d0-d7/a0-a6,-(a7)
  485.  sub.l ObjectPoints,a1
  486.  add.l #ObjRotated,a1
  487.  move.l (a1),Noisex
  488.  move.w #400,Noisevol
  489.  move.w #14,Samplenum
  490.  move.b #1,chanpick
  491.  clr.b notifplaying
  492.  st backbeat
  493.  move.b 1(a0),IDNUM
  494.  jsr MakeSomeNoise
  495.  movem.l (a7)+,d0-d7/a0-a6
  496.  
  497.  movem.l d0-d7/a0-a6,-(a7)
  498.  move.w #0,d0
  499.  asr.w #2,d2
  500.  tst.w d2
  501.  bgt.s .ko
  502.  moveq #1,d2
  503. .ko:
  504.  move.w #31,d3
  505.  jsr ExplodeIntoBits
  506.  movem.l (a7)+,d0-d7/a0-a6
  507.  
  508.  cmp.b #40,d2
  509.  blt .noexplode
  510.  
  511.  move.w #-1,12(a0)
  512.  move.w 12(a0),GraphicRoom(a0)
  513.  rts
  514.  
  515. .noexplode:
  516.  
  517.  movem.l d0-d7/a0-a6,-(a7)
  518.  sub.l ObjectPoints,a1
  519.  add.l #ObjRotated,a1
  520.  move.l (a1),Noisex
  521.  move.w #200,Noisevol
  522.  move.w screamsound,Samplenum
  523.  move.b #1,chanpick
  524.  clr.b notifplaying
  525.  st backbeat
  526.  move.b 1(a0),IDNUM
  527.  jsr MakeSomeNoise
  528.  movem.l (a7)+,d0-d7/a0-a6
  529.  
  530.  move.w #25,ThirdTimer(a0)
  531.  
  532.  move.w 12(a0),GraphicRoom(a0)
  533.  rts
  534.  
  535. .notdeadyet:
  536.  clr.b damagetaken(a0)
  537.  movem.l d0-d7/a0-a6,-(a7)
  538.  sub.l ObjectPoints,a1
  539.  add.l #ObjRotated,a1
  540.  move.l (a1),Noisex
  541.  move.w #200,Noisevol
  542.  move.w screamsound,Samplenum
  543.  move.b #1,chanpick
  544.  clr.b notifplaying
  545.  move.b 1(a0),IDNUM
  546.  st backbeat
  547.  jsr MakeSomeNoise
  548.  movem.l (a7)+,d0-d7/a0-a6
  549.  
  550.  
  551. .noscream
  552.  
  553.  
  554. ; tst.b canshootgun
  555. ; beq .cantshoot
  556.  cmp.w #20,FourthTimer(a0)
  557.  bge .cantshoot
  558.  
  559.  cmp.w #20,FourthTimer(a0)
  560.  bge .cantshoot
  561.  
  562.  jsr GetRand
  563.  and.w #31,d0
  564.  add.w #50,d0
  565.  move.w d0,ThirdTimer(a0)
  566.  
  567.  PROTLCHECK a5
  568.  
  569.  move.w #1,Samplenum
  570.  move.b #6,SHOTTYPE
  571.  move.b #7,SHOTPOWER
  572.  move.w #32,SHOTSPEED
  573.  move.w #4,SHOTSHIFT
  574.  move.w #0,SHOTOFFMULT
  575.  move.b ObjInTop(a0),SHOTINTOP
  576.  move.w #-10,2(a0)
  577.  move.l #0,SHOTYOFF
  578.  jsr FireAtPlayer1
  579.  
  580. .cantshoot:
  581.  
  582.  move.w TempFrames,d0
  583.  sub.w d0,SecTimer(a0)
  584.  bge.s .nohiss
  585.  
  586.  movem.l d0-d7/a0-a6,-(a7)
  587.  sub.l ObjectPoints,a1
  588.  add.l #ObjRotated,a1
  589.  move.l (a1),Noisex
  590.  move.w #100,Noisevol
  591.  move.w #16,Samplenum
  592.  move.b #1,chanpick
  593.  clr.b notifplaying
  594.  move.b 1(a0),IDNUM
  595.  st backbeat
  596.  jsr MakeSomeNoise
  597.  movem.l (a7)+,d0-d7/a0-a6
  598.  
  599.  Jsr GetRand
  600.  lsr.w #6,d0
  601.  and.w #255,d0
  602.  add.w #300,d0
  603.  move.w d0,SecTimer(a0)
  604.  
  605. .nohiss:
  606.  
  607.  move.b ObjInTop(a0),ViewerTop
  608.  move.b PLR1_StoodInTop,TargetTop
  609.  move.l PLR1_Roompt,ToRoom
  610.  move.l objroom,FromRoom
  611.  move.w newx,Viewerx
  612.  move.w newz,Viewerz
  613.  move.w PLR1_xoff,Targetx
  614.  move.w PLR1_zoff,Targetz
  615.  move.l PLR1_yoff,d0
  616.  asr.l #7,d0
  617.  move.w d0,Targety
  618.  move.w 4(a0),Viewery
  619.  jsr CanItBeSeen
  620.  
  621.  clr.b 17(a0)
  622.  tst.b CanSee
  623.  beq .carryonprowling
  624.  
  625.  move.b #1,17(a0)
  626.  
  627. .carryonprowling:
  628.  
  629.  cmp.b #'n',mors
  630.  beq.s .carryonprowling2
  631.  
  632.  
  633.  move.b ObjInTop(a0),ViewerTop
  634.  move.b PLR2_StoodInTop,TargetTop
  635.  move.l PLR2_Roompt,ToRoom
  636.  move.l objroom,FromRoom
  637.  move.w newx,Viewerx
  638.  move.w newz,Viewerz
  639.  move.w PLR2_xoff,Targetx
  640.  move.w PLR2_zoff,Targetz
  641.  move.l PLR2_yoff,d0
  642.  asr.l #7,d0
  643.  move.w d0,Targety
  644.  move.w 4(a0),Viewery
  645.  jsr CanItBeSeen
  646.  
  647.  tst.b CanSee
  648.  beq .carryonprowling2
  649.  
  650.  or.b #2,17(a0)
  651.  
  652. .carryonprowling2:
  653.  
  654.  
  655.  move.w 12(a0),GraphicRoom(a0)
  656.  rts
  657.  
  658. *************************************************
  659.  
  660. ToughMarineAttackPLR2:
  661.  
  662.  
  663.  
  664.  move.w TempFrames,d0
  665.  sub.w d0,FourthTimer(a0)
  666.  bgt.s .oktoshoot
  667.  move.w #50,ThirdTimer(a0)
  668. .oktoshoot:
  669.  
  670.  move.w 12(a0),d2
  671.  move.l ZoneAdds,a5
  672.  move.l (a5,d2.w*4),d0
  673.  add.l LEVELDATA,d0
  674.  move.l d0,objroom
  675.  
  676.  bsr ViewpointToDraw
  677.  
  678.  asl.l #2,d0
  679.  add.l #$100000,d0
  680.  move.l d0,8(a0)
  681.  
  682.  move.w PLR2_xoff,newx
  683.  move.w PLR2_zoff,newz
  684.  move.w (a0),d1
  685.  move.l #ObjRotated,a6
  686.  move.l ObjectPoints,a1
  687.  lea (a1,d1.w*8),a1
  688.  lea (a6,d1.w*8),a6
  689.  move.w (a1),oldx
  690.  move.w 4(a1),oldz
  691.  move.w maxspd(a0),d2
  692.  muls.w TempFrames,d2
  693.  move.w d2,speed
  694.  move.w #80,Range
  695.  move.w 4(a0),d0
  696.  ext.l d0
  697.  asl.l #7,d0
  698.  sub.l #64*128,d0
  699.  move.l d0,newy
  700.  move.l d0,oldy
  701.  
  702.  move.b ObjInTop(a0),StoodInTop
  703.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  704.  clr.b canshove
  705.  clr.b GotThere
  706.  jsr HeadTowardsAng
  707.  move.w #%1000000000,wallflags
  708.  
  709.   
  710.  clr.b wallbounce
  711.  Jsr MoveObject
  712.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  713.  move.b StoodInTop,ObjInTop(a0)
  714.  
  715.  move.w AngRet,Facing(a0)
  716.  
  717.  move.l objroom,a2
  718.  move.w (a2),12(a0)
  719.  move.w oldx,(a1)
  720.  move.w oldz,4(a1)
  721.  
  722.  move.w (a2),d0
  723.  move.l #ZoneBrightTable,a5
  724.  move.l (a5,d0.w*4),d0
  725.  tst.b ObjInTop(a0)
  726.  bne.s .okbit
  727.  swap d0
  728. .okbit:
  729.  move.w d0,2(a0)
  730.  
  731.  move.l ToZoneFloor(a2),d0
  732.  tst.b ObjInTop(a0)
  733.  beq.s .notintop
  734.  move.l ToUpperFloor(a2),d0
  735. .notintop:
  736.  asr.l #7,d0
  737.  sub.w #64,d0
  738.  move.w d0,4(a0)
  739.  
  740.  move.b damagetaken(a0),d2
  741.  beq .noscream
  742.  
  743.  sub.b d2,numlives(a0)
  744.  bgt .notdeadyet
  745.  
  746. ; cmp.b #1,d2
  747. ; ble.s .noexplode
  748.  
  749.  movem.l d0-d7/a0-a6,-(a7)
  750.  sub.l ObjectPoints,a1
  751.  add.l #ObjRotated,a1
  752.  move.l (a1),Noisex
  753.  move.w #400,Noisevol
  754.  move.w #14,Samplenum
  755.  move.b #1,chanpick
  756.  clr.b notifplaying
  757.  st backbeat
  758.  move.b 1(a0),IDNUM
  759.  jsr MakeSomeNoise
  760.  movem.l (a7)+,d0-d7/a0-a6
  761.  
  762.  movem.l d0-d7/a0-a6,-(a7)
  763.  move.w #0,d0
  764.  move.w #9,d2
  765.  move.w #31,d3
  766.  jsr ExplodeIntoBits
  767.  movem.l (a7)+,d0-d7/a0-a6
  768.  move.w #-1,12(a0)
  769.  move.w 12(a0),GraphicRoom(a0)
  770.  rts
  771.  
  772. .noexplode:
  773.  
  774.  movem.l d0-d7/a0-a6,-(a7)
  775.  sub.l ObjectPoints,a1
  776.  add.l #ObjRotated,a1
  777.  move.l (a1),Noisex
  778.  move.w #200,Noisevol
  779.  move.w screamsound,Samplenum
  780.  move.b #1,chanpick
  781.  clr.b notifplaying
  782.  st backbeat
  783.  move.b 1(a0),IDNUM
  784.  jsr MakeSomeNoise
  785.  movem.l (a7)+,d0-d7/a0-a6
  786.  move.l deadframe,8(a0)
  787.  move.w 12(a0),GraphicRoom(a0)
  788.  rts
  789.  
  790. .notdeadyet:
  791.  clr.b damagetaken(a0)
  792.  movem.l d0-d7/a0-a6,-(a7)
  793.  sub.l ObjectPoints,a1
  794.  add.l #ObjRotated,a1
  795.  move.l (a1),Noisex
  796.  move.w #200,Noisevol
  797.  move.w screamsound,Samplenum
  798.  move.b #1,chanpick
  799.  clr.b notifplaying
  800.  move.b 1(a0),IDNUM
  801.  st backbeat
  802.  jsr MakeSomeNoise
  803.  movem.l (a7)+,d0-d7/a0-a6
  804.  
  805. .noscream
  806.  
  807. ; tst.b canshootgun
  808. ; beq .cantshoot
  809.  cmp.w #20,FourthTimer(a0)
  810.  bge .cantshoot
  811.  
  812.  cmp.w #20,FourthTimer(a0)
  813.  bge .cantshoot
  814.  
  815.  jsr GetRand
  816.  and.w #31,d0
  817.  add.w #50,d0
  818.  move.w d0,ThirdTimer(a0)
  819.  
  820.  
  821.  move.w #1,Samplenum
  822.  move.b #6,SHOTTYPE
  823.  move.b #7,SHOTPOWER
  824.  move.w #32,SHOTSPEED
  825.  move.w #4,SHOTSHIFT
  826.  move.w #0,SHOTOFFMULT
  827.  move.b ObjInTop(a0),SHOTINTOP
  828.  move.w #-10,2(a0)
  829.  move.l #0,SHOTYOFF
  830.  jsr FireAtPlayer1
  831.  
  832. .cantshoot:
  833.  
  834.  move.w TempFrames,d0
  835.  sub.w d0,SecTimer(a0)
  836.  bge.s .nohiss
  837.  
  838.  movem.l d0-d7/a0-a6,-(a7)
  839.  sub.l ObjectPoints,a1
  840.  add.l #ObjRotated,a1
  841.  move.l (a1),Noisex
  842.  move.w #100,Noisevol
  843.  move.w #16,Samplenum
  844.  move.b #1,chanpick
  845.  clr.b notifplaying
  846.  move.b 1(a0),IDNUM
  847.  st backbeat
  848.  jsr MakeSomeNoise
  849.  movem.l (a7)+,d0-d7/a0-a6
  850.  
  851.  Jsr GetRand
  852.  lsr.w #6,d0
  853.  and.w #255,d0
  854.  add.w #300,d0
  855.  move.w d0,SecTimer(a0)
  856.  
  857. .nohiss:
  858.  
  859.  move.b ObjInTop(a0),ViewerTop
  860.  move.b PLR1_StoodInTop,TargetTop
  861.  move.l PLR1_Roompt,ToRoom
  862.  move.l objroom,FromRoom
  863.  move.w newx,Viewerx
  864.  move.w newz,Viewerz
  865.  move.w PLR1_xoff,Targetx
  866.  move.w PLR1_zoff,Targetz
  867.  move.l PLR1_yoff,d0
  868.  asr.l #7,d0
  869.  move.w d0,Targety
  870.  move.w 4(a0),Viewery
  871.  jsr CanItBeSeen
  872.  
  873.  clr.b 17(a0)
  874.  tst.b CanSee
  875.  beq .carryonprowling
  876.  
  877.  move.b #1,17(a0)
  878.  
  879. .carryonprowling:
  880.  
  881.  cmp.b #'n',mors
  882.  beq.s .carryonprowling2
  883.  
  884.  
  885.  move.b ObjInTop(a0),ViewerTop
  886.  move.b PLR2_StoodInTop,TargetTop
  887.  move.l PLR2_Roompt,ToRoom
  888.  move.l objroom,FromRoom
  889.  move.w newx,Viewerx
  890.  move.w newz,Viewerz
  891.  move.w PLR2_xoff,Targetx
  892.  move.w PLR2_zoff,Targetz
  893.  move.l PLR2_yoff,d0
  894.  asr.l #7,d0
  895.  move.w d0,Targety
  896.  move.w 4(a0),Viewery
  897.  jsr CanItBeSeen
  898.  
  899.  tst.b CanSee
  900.  beq .carryonprowling2
  901.  
  902.  or.b #2,17(a0)
  903.  
  904. .carryonprowling2:
  905.  
  906.  
  907.  move.w 12(a0),GraphicRoom(a0)
  908.  rts
  909.  
  910.  
  911.